# -*- coding: utf-8 -*-
"""
Django数据模型定义

该模块定义了应用程序的数据模型，包括JSON数据存储和Kafka配置管理。
主要模型：
1. JsonData: 存储和管理JSON数据
2. KafkaConfig: 存储和管理Kafka连接配置
"""

from django.db import models

# Create your models here.
class JsonData(models.Model):
    """
    JSON数据模型
    
    用于存储用户输入的JSON数据，支持数据的持久化存储和检索。
    主要用途：
    - 保存用户编辑的JSON数据
    - 提供JSON数据的历史记录
    - 支持JSON数据的重复使用
    """
    id = models.AutoField(primary_key=True, verbose_name='主键ID')
    json = models.TextField(null=True, blank=True, verbose_name='JSON数据')
    
    class Meta:
        db_table = 'k_json'  # 数据库表名
        verbose_name = 'JSON数据'  # 管理界面显示名称
        verbose_name_plural = verbose_name  # 复数形式显示名称
        
    def __str__(self):
        """模型的字符串表示"""
        return f'JSON数据 {self.id}'

class KafkaConfig(models.Model):
    """
    Kafka配置模型
    """
    id = models.AutoField(primary_key=True, verbose_name='主键ID')
    name = models.CharField(max_length=64, null=True, blank=True, verbose_name='配置名称')
    url = models.CharField(max_length=256, null=True, blank=True, verbose_name='kafka服务器url')
    topic = models.CharField(max_length=255, null=True, blank=True, verbose_name='主题名称')
    json = models.CharField(max_length=4000, null=True, blank=True, verbose_name='JSON数据')
    
    class Meta:
        db_table = 'k_config'
        verbose_name = 'Kafka配置'
        verbose_name_plural = verbose_name
        
    def __str__(self):
        """模型的字符串表示"""
        return f'Kafka配置 {self.name}'

# KKeyMap模型类保持不变
class KKeyMap(models.Model):
    name = models.CharField(max_length=128, null=True, blank=True, verbose_name='中文名称')
    key = models.CharField(max_length=128, null=True, blank=True, verbose_name='英文key')
    value = models.CharField(max_length=255, null=True, blank=True, verbose_name='值映射')

    class Meta:
        db_table = 'k_key_map'
        verbose_name = 'key映射'
        verbose_name_plural = verbose_name

    def __str__(self):
        return f"{self.name} ({self.key})"

class KKeyDisplay(models.Model):
    """
    字段显示配置模型
    
    用于控制JSON解析器页面中键值对的显示，支持嵌套字段配置。
    主要用途：
    - 控制哪些字段在JSON编辑器中显示
    - 提供字段的中文显示名称
    - 支持嵌套对象和数组的子字段配置
    """
    id = models.AutoField(primary_key=True, verbose_name='主键ID')
    config_id = models.IntegerField(null=True, blank=True, verbose_name='配置ID')
    key = models.CharField(max_length=255, null=True, blank=True, verbose_name='字段名')
    name = models.CharField(max_length=255, null=True, blank=True, verbose_name='字段中文显示')
    sub = models.CharField(max_length=4000, null=True, blank=True, verbose_name='子字段')
    
    class Meta:
        db_table = 'k_key_display'
        verbose_name = '字段显示配置'
        verbose_name_plural = verbose_name
        
    def __str__(self):
        """模型的字符串表示"""
        return f'字段显示配置 {self.key} ({self.name})'

# 删除MySQLKeyMap模型，直接使用原生SQL查询MySQL数据库
